// 一个 V 字型为一个循环, 一个循环为 n = (2 * numRows - 2) （2倍行数 - 头尾2个） 的倍数。
// 对于字符串索引 i，可计算 x = i % n。

// 当 x < numRows 时，x 对应行号。
// 当 x >= numRows 时，n - x 对应行号。
// 以 numRows = 4 为例，则 n = 6， 规律如下：


// 根据规律可拼接出每一行的的字符串，最后合并所有行即可。



/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function (s, numRows) {
    // 先定义好自己的空数组
    var arr = new Array(numRows).fill("")

    if (numRows == 1) {
        return s
    }
    const size = numRows * 2 - 2 //计算的是关于计算的轮回赋值的周期
    for (let i = 0; i < s.length; i++) {
        // 利用x来确定我们是否进行换行的问题
        let x = i % size //很重要，容易将其写成 numRows
        // 关于使用了
        arr[x < numRows ? x : size - x] += s[i] //此处的是的回来的时候，需要用我们的周期来减去我们的余数，刚刚好和我们的队形的数组的index相同
    }
    return arr.join('')
};


let c = convert("PAYPALISHIRING", 3)
console.log(c);